#ifndef THREAD_H_
#define THREAD_H_

#include <pthread.h>

/*
 * @class Thread
 *
 * @brief Encapsulamiento del funcionamiento de un thread
 * 		  Clase abstracta.
 *
 */
class Thread
{
private:
	pthread_t thread;

	/**
	 * Evito la copia
	 */
	Thread(const Thread& s);
	Thread* operator = (Thread* );

	/**
	 * Pone a correr el thread
	 */
	static void* start_routine(void* argumento);
public:
	/**
	 * Constructor
	 */
	Thread();

	/**
	 * Crea el thread y empieza la rutina
	 */
	void start();

	/**
	 * Join del thread
	 */
	void* join();

	/**
	 * Destructor
	 */
	virtual ~Thread();

protected:
	/**
	 * Metodo abstracto a implementar por las clases herederas.
	 * Contiene la rutina a ser ejecutada.
	 */
	virtual void* run() = 0;

};

#endif /* THREAD_H_ */
